import socket


def main():
    # 创建tcp server socket
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 绑定监听地址
    tcp_server_socket.bind(("192.168.159.1", 9000))
    # 套接字默认为主动发送数据，变为被动,128表示同一时间支持多少客户端连接，但是最终支持数由操作系统决定
    tcp_server_socket.listen(128)

    # 循环为多个客户端服务
    while True:
        # 阻塞接收客户端连接,如果有连接返回客户端socke+客户端地址
        new_client_socket, client_addr = tcp_server_socket.accept()
        print("新连接客户端地址为 %s" % str(client_addr))

        """
        通过客户端socket接收数据
        recv直接返回数据，因为accept已经接收到客户端地址
        recvfrom返回数据和客户端地址
        """
        # 循环为单个客户端服务
        while True:
            # recv为堵塞方法，解堵塞的情况有个：客户端发来标志数据、客户端关闭则client_data为空
            client_data = new_client_socket.recv(1024)
            client_data_str = client_data.decode("gbk")
            if client_data_str:  # client_data_str为空则为False，如果不为空则为True
                print("收到客户端数据 %s" % client_data_str)
                # 给客户端响应数据
                new_client_socket.send("收到了".encode("gbk"))
            else:
                break
        print("为一个用户服务完毕")
        # 关闭客户端socket
        new_client_socket.close()
        # 关闭服务端socket
    tcp_server_socket.close()


if __name__ == '__main__':
    main()
